#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
long long n,k,a[10000005];
long long dp[10000005];
bool check(){
	for(int i=1;i<n;i++){
		if(a[i]>a[i+1])return 0;
	}
	return 1;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	freopen("knight.in","r",stdin);
	freopen("knight.out","w",stdout);
	cin>>n>>k;
	
	memset(dp,0x3f,sizeof(dp));
	dp[0]=0;
	for(int i=1;i<=n;i++)cin>>a[i];
	if(check()){
		for(int i=1;i<=n;i++){
			long long maxn=a[i];
			dp[i]=dp[max(i-k,0ll)]+maxn;
//			for(int j=i-1;j>=max(i-k,0ll);j--){
//				dp[i]=min(maxn+dp[j],dp[i]);
//			}
		}
	}else{
		for(int i=1;i<=n;i++){
			long long maxn=a[i];
			for(int j=i-1;j>=max(i-k,0ll);j--){
				dp[i]=min(maxn+dp[j],dp[i]);
				maxn=max(maxn,a[j]);
			}
		}
	}
	
	long long sum=1,ans=0;
	for(int i=0;i<n;i++){
//		cout<<dp[i+1]<<" ";
		
		ans=(ans+dp[n-i]%mod*sum%mod)%mod;
		sum=sum*23%mod;
	}
	cout<<ans<<'\n';
	return 0;
}

